package com.zcsy.commons.upload;

import java.io.File;
import java.io.InputStream;
import java.util.Map;

/**
 * 文件资源接口.<br>
 * 
 * @author tanghan   barbadosliy@163.com
 * @version 2015年6月7日
 * @see IFileResource
 * @since  JDK1.7.0
 */
public interface IFileResource {

	/**
	 * 保存文件, 并返回文件的标示符(生成的标示符 会和具体实现使用的保存方式有关).
	 * 
	 * @param file
	 *            要保存的文件
	 * @return 文件的标示符
	 */
	String save(File file);

	/**
	 * 获取文件的信息
	 * 
	 * @param identity
	 *            文件的标示符
	 * @return 文件信息的描述, JSON 格式
	 */
	Map<String, Object> getInfo(String identity);

	/**
	 * 根据提供的文件的标示符, 获取对应的文件资源.
	 * 
	 * @param identity
	 *            文件的标示符
	 * @return 输出流
	 */
	InputStream getAsStream(String identity);

	/**
	 * 根据提供的文件的MD5 , 获取对应的文件资源.
	 * 
	 * @param md5
	 *            MD5
	 * @return 输出流
	 */
	InputStream getAsStreamByMd5(String md5);

	/**
	 * 获取默认用户头像信息
	 * 
	 * @return
	 */
	Map<String, Object> getDefaultUserPicInfo();

	/**
	 * 根据提供的文件的标示符, 获取对应的文件资源.
	 * 
	 * @param identity
	 *            文件的标示符
	 * @return 文件内容
	 */
	byte[] get(String identity);

	/**
	 * 删除指定的文件.
	 * 
	 * @param identity
	 *            文件的标示符
	 * @return 是否删除成功
	 */
	boolean del(String identity);
}
